<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="pandoc" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <title>Attribute Explorer</title>
  <style>
    code{white-space: pre-wrap;}
    span.smallcaps{font-variant: small-caps;}
    div.columns{display: flex; gap: min(4vw, 1.5em);}
    div.column{flex: auto; overflow-x: auto;}
    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
    /* The extra [class] is a hack that increases specificity enough to
       override a similar rule in reveal.js */
    ul.task-list[class]{list-style: none;}
    ul.task-list li input[type="checkbox"] {
      font-size: inherit;
      width: 0.8em;
      margin: 0 0.8em 0.2em -1.6em;
      vertical-align: middle;
    }
    .display.math{display: block; text-align: center; margin: 0.5rem auto;}
  </style>
  <link rel="stylesheet" href="github-pandoc.css" />
</head>
<body>
<header id="title-block-header">
<h1 class="title">Attribute Explorer</h1>
</header>
<p>The Attribute Explorer allows the user to view and manipulate
Attributes.</p>
<p>Attributes allow the user to read and write additional model
information. Attributes are process-agnostic in OpenVSP, and are free to
represent virtually any kind of information, ranging from user notes on
design intent to input parameters for downstream engineering analysis
tools.</p>
<p>Attributes are stored in Attribute Collections or Attribute Groups;
most OpenVSP objects have an Attribute Collection, such that a user may
store Attributes in the Vehicle, its Geoms, Subsurface, Links, Advanced
Links, Measures, Parms, Cross sections, Wing Sections, and even in other
Attributes. Any OpenVSP object supporting Attributes will have a
minimized attribute explorer at the bottom of its GUI window. These
attributes are accessible both in GUI and API commands, allowing for
user edits and scripted operations of integrated design toolchains.</p>
<h2 id="attribute-types">Attribute Types</h2>
<p>Attributes can store a variety of datatypes.</p>
<table>
<thead>
<tr>
<th style="text-align: left;">Attribute Types</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Boolean</td>
</tr>
<tr>
<td style="text-align: left;">Integer</td>
</tr>
<tr>
<td style="text-align: left;">Double</td>
</tr>
<tr>
<td style="text-align: left;">String</td>
</tr>
<tr>
<td style="text-align: left;">Parms</td>
</tr>
<tr>
<td style="text-align: left;">Vec3D</td>
</tr>
<tr>
<td style="text-align: left;">Integer Matrix</td>
</tr>
<tr>
<td style="text-align: left;">Double Matrix</td>
</tr>
<tr>
<td style="text-align: left;">Attribute Group</td>
</tr>
</tbody>
</table>
<p>Vec3D and Matrix type Attributes support copy/paste with standard
spreadsheet software for ease of use. They also support renamable column
and row headers by creating a string attribute of the name "row_{name of
matrix attribute}" and entering a comma-delimited series of header
names. This name attribute must be within the same collection/group as
the matrix/Vec3D attribute for this to work.</p>
<p>The Parm type and Attribute Group type also have some
eccentricities.</p>
<p>To ensure consistency in user workflow and API access methods, the
Parm type attribute can be used to reference the value of any Parm in
the OpenVSP vehicle. In the Explorer GUI, it has a Parm Picker with
dropdown menus, and the user may simply drag and drop a ParmID onto the
GUI space to copy it easily. Once referencing a valid Parm, the GUI
mirrors the slider used by that Parm, permitting the user to drive the
parm from the Attribute Explorer. Linking a user-defined parm with
several parm-type attributes can powerfully drive metadata such as
material properties or design variables for downstream analysis
tools.</p>
<p>To encourage clean organization of user Attributes, Attribute Groups
permit hierarhicial nesting of attributes. A user may use attribute
groups to organize the attributes by intended downstream analysis tool,
or enable multiple attributes of the same name (attributes must have a
unique name within each collection or group).</p>
<h2 id="attributable-objects">Attributable Objects</h2>
<p>Attributes can be added to many OpenVSP objects.</p>
<table>
<thead>
<tr>
<th style="text-align: left;">Attributable Objects</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Vehicle</td>
</tr>
<tr>
<td style="text-align: left;">Geom</td>
</tr>
<tr>
<td style="text-align: left;">SubSurface</td>
</tr>
<tr>
<td style="text-align: left;">Xsec</td>
</tr>
<tr>
<td style="text-align: left;">Wing Section</td>
</tr>
<tr>
<td style="text-align: left;">Airfoil Section</td>
</tr>
<tr>
<td style="text-align: left;">Parm</td>
</tr>
<tr>
<td style="text-align: left;">Measure</td>
</tr>
<tr>
<td style="text-align: left;">Link</td>
</tr>
<tr>
<td style="text-align: left;">AdvLink</td>
</tr>
<tr>
<td style="text-align: left;">Mode</td>
</tr>
<tr>
<td style="text-align: left;">GeomSet</td>
</tr>
<tr>
<td style="text-align: left;">VarPreset</td>
</tr>
<tr>
<td style="text-align: left;">Attribute</td>
</tr>
</tbody>
</table>
<h2 id="gui-operations">GUI Operations</h2>
<p>The GUI has been designed to enable clean, easy Attributes work.
Copy/Cut/Paste commands exist for moving attributes in and out of
different collections and groups. Cut/Copy/Paste/Delete all have hotkeys
available for ease of use. Most GUI operations available for Attributes
work for multiple selections of attributes and collections at once-
e.g., a user can copy a single attribute and paste into multiple
collections/groups.</p>
<p>Due to the vast quantity of attributable objects in an OpenVSP
vehicle, the explorer only shows attribute collections either if they
are populated with attributes or if their objects' associated GUI window
has been opened. For example, a user would add a Geom, and then select
that Geom to open its GUI window- once that window is opened the
explorer shows the empty attribute collection for user access. Multiple
geoms may be selected at once for expediency.</p>
<p>The Attribut Explorer also has search functions available for sorting
through complicated models. A user may search by name string, with or
without case sensitivity</p>
<h2 id="api-usage">API Usage</h2>
<p>Attributes support data transfer into and out of OpenVSP via the API.
This supports use of attribute data for upstream scripted model
generation and for downstream analysis toolchains. The API is fully
documented in the docs.</p>
</body>
</html>
